CloudFormation UpdatePolicyを使用してAuto Scaling Groupの更新を処理する
CloudFormation UpdatePolicyとは?
UpdatePolicyはCloudFormationのリソース属性です。UpdatePolicyを使用して、AWS Resourcesの更新を処理することができます。
更新ポリシーをサポートしている AWS CloudFormation リソースは:
- AWS::AutoScaling::AutoScalingGroup
- AWS::ElastiCache::ReplicationGroup
- AWS::ElastiCache::Domain
- AWS::AppStream::Fleet
- AWS::Lambda::Alias
- AWS::OpenSearchService::Domain
この記事では、更新ポリシーを使用してAutoScalingGroupの更新を処理してみました。AWS::AutoScaling::AutoScalingGroupリソースでは、3 つの更新ポリシーがあります。
- AutoScalingReplacingUpdate
- AutoScalingRollingUpdate
- AutoScalingScheduledAction
やってみた
CloudFormationでAuto Scaling グループを作成しておきます。このAuto Scaling グループは3つのEC2インスタンス(t2.micro)を作成されます。
Replacing Updateポリシー
Replacing Updateポリシーでは、Auto Scaling グループまたはAuto Scaling グループのインスタンスが更新時に置き換えられます。この更新とき、新しいAuto Scalingグループの作成が完了するまでCloudFormationが古いAuto Scalingグループを保持します。失敗した場合、CloudFormation は古いグループにロールバックして、新しい グループを削除します。
UpdatePolicy: AutoScalingReplacingUpdate: # The WillReplace attribute is set to true for replace update WillReplace: True
CloudFormationは新しいグループの作成が完了した後で、古いAuto Scalingグループを削除します。WillReplaceパラメーターを設定するときは、 CreationPolicyを指定する必要がある。
ReplacingUpdateのテンプレート:
インスタンスタイプをt2.microからt2.small に変更して、Auto ScalingグループをAutoScalingReplacingUpdateで更新しておきます。
Parameters: LatestAMIID: Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' Resources: LaunchConfig: Type: AWS::AutoScaling::LaunchConfiguration Properties: ImageId: !Ref LatestAMIID InstanceType: t2.small #t2.micro UserData: Fn::Base64: !Sub | #!/bin/bash -xe /opt/aws/bin/cfn-signal --resource AutoScalingGroup --region ${AWS::Region} --stack ${AWS::StackName} AutoScalingGroup: Type: AWS::AutoScaling::AutoScalingGroup Properties: AvailabilityZones: - us-east-1a - us-east-1b - us-east-1c LaunchConfigurationName: Ref: LaunchConfig DesiredCapacity: 3 MinSize: 1 MaxSize: 4 CreationPolicy: ResourceSignal: Count: 3 Timeout: PT5M UpdatePolicy: AutoScalingReplacingUpdate: WillReplace: 'true'
更新する前に、変更セットのプレビューで変更を見ることができます。
下の画像は、作成中の新しいAuto Scalingグループを示しています。
ReplacingUpdateポリシーは、新しいLaunchConfigurationと新しいAuto Scalingグループを作成されます。CloudFormation がインスタンスの作成の成功シグナルを受信します。
CloudFormation が成功シグナルを受信した後で、古いAuto Scalingグループと古いLaunch Configurationを削除されます。
この画像では、古いAuto Scalingグループのイインスタンスが終了しています。
RollingUpdateポリシー
RollingUpdateでは、Auto Scaling グループのインスタンスをバッチでまたは一度にすべて更新します。ローリング更新の場合、バッチサイズとインスタンスの最小数とPauseTimeを指定必要があります。CloudFormationがバッチで更新した後で、古いLaunch Configurationを削除されます。
Rolling更新のテンプレート
インスタンスタイプをt2.microからt2.small に変更して、Auto ScalingグループをAutoScalingRollingUpdateで更新しておきます。
Parameters: LatestAMIID: Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' Resources: LaunchConfiguration: Type: AWS::AutoScaling::LaunchConfiguration Properties: ImageId: !Ref LatestAMIID InstanceType: t2.small UserData: Fn::Base64: !Sub | #!/bin/bash -xe /opt/aws/bin/cfn-signal --resource AutoScalingGroup --region ${AWS::Region} --stack ${AWS::StackName} AutoScalingGroup: Type: AWS::AutoScaling::AutoScalingGroup Properties: AvailabilityZones: - us-east-1a - us-east-1b - us-east-1c LaunchConfigurationName: Ref: LaunchConfiguration DesiredCapacity: 3 MinSize: 1 MaxSize: 4 CreationPolicy: ResourceSignal: Count: 3 Timeout: PT5M UpdatePolicy: AutoScalingRollingUpdate: MaxBatchSize: 2 MinInstancesInService: 1 PauseTime: PT1M WaitOnResourceSignals: 'true'
AutoScalingRollingUpdate ポリシーのプロパティ
- MaxBatchSize ー バッチで更新するインスタンスの最大数を指定します。バッチあたりの最大インスタンス数は100です。
- MinInstancesInService ー 更新の時、InServiceにするインスタンスの最小数を指定します。
- PauseTime ー バッチ更新の後 CloudFormation が止する時間の長さを指定します。
- WaitOnResourceSignals ー Auto Scaling グループがインスタンスのシグナルを待機すかどうかを指定します。
変更セットのプレビュー
このAuto Scaling グループで3つのインスタンがありますから、この更新は2つのバッチで行われます。
- 最初のバッチで2つのインスタンスが更新されます。この画像では、2つのインスタンスが作成され、2つのインスタンスが削除されいます。
- 2番目のバッチ1つのインスタンスが更新されます。
RollingUpdateの後、CloudFormation が古いLaunch Configurationを削除されます。
Scheduled Action更新ポリシー
Scheduled Action更新ポリシーはスケジュールされたアクションが関連付けられている Auto Scaling グループを更新するとき使います。この更新ポリシーでは、Auto Scaling グループのグループサイズプはいつでも変更されます。
グループサイズを変更したくない場合は、IgnoreUnmodifiedGroupSizeProperties : "True" に設定してください。
UpdatePolicy: AutoScalingScheduledAction: IgnoreUnmodifiedGroupSizeProperties: True
まとめ
CloudFormationでAuto Scaling グループのReplacingUpdateとRollingUpdateポリシートライしてみました。UpdatePolicyは、Auto Scaling グループのインスタンスを更新するプロセスを自動化します。
Reference : CloudFormation UpdatePolicy